/**
 * Copyright (c) 2006-2007 Berlin Brown and botnode.com/Berlin Research  All Rights Reserved
 *
 * http://www.opensource.org/licenses/bsd-license.php

 * All rights reserved.

 * Redistribution and use in source and binary forms, with or without modification,
 * are permitted provided that the following conditions are met:

 * * Redistributions of source code must retain the above copyright notice,
 * this list of conditions and the following disclaimer.
 * * Redistributions in binary form must reproduce the above copyright notice,
 * this list of conditions and the following disclaimer in the documentation
 * and/or other materials provided with the distribution.
 * * Neither the name of the Botnode.com (Berlin Brown) nor
 * the names of its contributors may be used to endorse or promote
 * products derived from this software without specific prior written permission.

 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *
 * Date: 12/15/2009 
 *   
 * Home Page: http://botnode.com/
 * 
 * Contact: Berlin Brown <berlin dot brown at gmail.com>
 */
package org.bresearch.octane.proxy;

import org.apache.ws.commons.tcpmon.core.engine.Interceptor;
import org.apache.ws.commons.tcpmon.core.engine.InterceptorConfiguration;
import org.apache.ws.commons.tcpmon.core.engine.InterceptorConfigurationBuilder;
import org.apache.ws.commons.tcpmon.core.engine.RequestResponseListener;
import org.apache.ws.commons.tcpmon.core.ui.AbstractListener;
import org.apache.ws.commons.tcpmon.core.ui.Configuration;

/**
 * Simple but capabale console proxy implementation based on tcpmon source. 
 * 
 */
public class ConsoleListener extends AbstractListener {

    private final InterceptorConfiguration configuration;
    
    public ConsoleListener(final InterceptorConfiguration configuration) {        
        this.configuration = configuration;        
    }
    
    @Override
    public Configuration getConfiguration() {
        
        InterceptorConfigurationBuilder configBuilder = new InterceptorConfigurationBuilder(this.configuration);
        Configuration config = new Configuration();
        
        configBuilder.setListenPort(this.configuration.getListenPort());
        configBuilder.setTargetHost(this.configuration.getTargetHost());
        configBuilder.setTargetPort(this.configuration.getTargetPort());
        configBuilder.setProxy(this.configuration.isProxy());
        
        config.setInterceptorConfiguration(configBuilder.build());
        
        return config;
    }

    public RequestResponseListener createRequestResponseListener(String fromHost) {
        
        return new RequestResponse(this, fromHost);
        
    }

    public void onServerSocketError(Throwable ex) {
        ex.printStackTrace();
        
    }

    public void onServerSocketStart() {
        System.out.println("Server Socket Start");        
    }

    public void start() {
        
        final Interceptor interceptor = new Interceptor(this.configuration, this);
        // Start listening, proxying //
        interceptor.start();
    }
    
} // End of the Class //
